## Exerccio Galileo
install.packages("UsingR")
library(UsingR)
data(galileo)
galileo

#Primeiro modelo: y=a+bx
m1 <- lm(h.d~init.h,data=galileo)
anova(m1)#O primeiro modelo  mais significativo do que o modelo nulo.
summary(m1)#O r^2=0.9264  super representativo.

#Apesar disto, verifica-se como o modelo se ajusta a uma parbola. y=a+bx+cx^2
m2 <- update(m1,.~.+I(init.h^2))
anova(m2)#O acrscimo do termo quadrtico  significativo e traz mais explicaes ao modelo.
anova(m1,m2)#So modelos diferentes e o melhor modelo  o segundo, pois tem menos resduos (os pontos se afasta menos da parbola)
summary(m2)#O r^2=0.9903  mais representativo do que o modelo1.

#Por fim, verifica-se um modelo com um termo cbico. y=a+bx+cx^2+dx^3
m3 <- update(m2,.~.+I(init.h^3))
anova(m3)#O acrscimo do termo cbico  significativo e traz mais explicaes ao modelo.
anova(m2,m3)#So modelos diferentes e o melhor modelo  o terceiro, pois tem menos resduos (os pontos se afastam menos do modelo).
summary(m3)#O r^2=0.9994  quase perfeito, portanto  mais representativo do que o modelo2.

#Galileo estava certo. O melhor modelo neste caso  um que contenha um termo quadrtico e tambm um termo cbico.



### Exerccio Massa de Recm-Nascidos
babies <- read.table("babies.txt",header=T,sep="")
babies
head(babies)
tail(babies)
str(babies)

#Encontrando dados faltantes:
sum(babies$bwt=="999")
sum(babies$gestation=="999")
babies$gestation[babies$gestation==999] <- NA
sum(babies$parity=="9")
sum(babies$age=="99")
babies$age[babies$age==99] <- NA
sum(babies$height=="99")
babies$height[babies$height==99] <- NA
sum(babies$weight=="999")
babies$weight[babies$weight==999] <- NA
sum(babies$smoke=="9")
babies$smoke[babies$smoke==9] <- NA
babies$smoke <- as.logical(babies$smoke)
babies$parity <- as.factor(babies$parity)

#Eliminando linhas com os dados faltantes:
babies <- babies[apply(is.na(babies),1,sum)==0,]
summary(babies)

#Diagnstico atravs de grficos. 
plot(bwt~gestation,data=babies)
plot(bwt~parity,data=babies)
plot(bwt~age,data=babies)
plot(bwt~height,data=babies)
plot(bwt~weight,data=babies)
plot(bwt~smoke,data=babies)

#Verificando colinearidade entre as variveis preditoras:
summary(lm(gestation~parity,data=babies))
summary(lm(gestation~age,data=babies))
summary(lm(gestation~height,data=babies))
summary(lm(gestation~weight,data=babies))
summary(lm(gestation~smoke,data=babies))
summary(lm(age~parity,data=babies))
summary(lm(age~height,data=babies))
summary(lm(age~weight,data=babies))
summary(lm(age~smoke,data=babies))
summary(lm(height~parity,data=babies))
summary(lm(height~weight,data=babies))
summary(lm(height~smoke,data=babies))
summary(lm(weight~smoke,data=babies))
summary(lm(weight~parity,data=babies))
#No h colinearidade entre as variveis preditoras. Vou testar todas elas nos modelos.

#Testando os modelos:
#O critrio de escolha dos modelos foi atravs da avaliao do p de cada parmetro(varivel preditora). Sendo considerado 
#significativo p>=0.05
head(babies)
lm1 <- lm(bwt~gestation,data=babies)
anova(lm1) #A varivel gestation  significativa para o modelo.
summary(lm1) #r^2=0.1661
lm2 <- lm(bwt~gestation+parity,data=babies) 
anova(lm2) #A varivel parity  significativa para o modelo.
anova(lm1,lm2) #Os modelos so diferentes e o segundo tem menos resduos. Portanto escolhi o segundo.
summary(lm2) #o r^2=0.172
lm3 <- lm(bwt~gestation+parity+age,data=babies)
anova(lm3) #A varivel age no  significativa para o modelo.
anova(lm2,lm3) #Os modelos so iguais. Portanto, escolhi o mais simples(lm2).
lm4 <- lm(bwt~gestation+parity+height,data=babies)
anova(lm4) #A variavl height  significativa para o modelo.
anova(lm2,lm4)#Os modelos so diferentes e o quarto tem menos resduos. Portanto escolhi o quarto.
summary(lm4) #O r^2=0.2039 
lm5 <- lm(bwt~gestation+parity+height+weight,data=babies)
anova(lm5) #A varivel weight  significativa para o modelo.
anova(lm4,lm5) #Os modelos so diferentes e o quinto tem menos resduos. Portanto escolhi o quinto.
summary(lm5) #O r^2=0.2085
lm6 <- lm(bwt~gestation+parity+height+weight+smoke,data=babies)
anova(lm6) #A varivel smoke  significativa para o modelo.
anova(lm5,lm6) #Os modelos so diferentes e o sexto tem menos resduos. Portanto escolhi o sexto.
summary(lm6) #O r^2=0.2579 
#Vou comear a testar as interaes:
lm7 <- lm(bwt~gestation+parity+height+weight+smoke+gestation:parity,data=babies)
anova(lm7) #A interao gestation:parity no  significativa para o modelo.
anova(lm6,lm7) #Os modelos so iguais. Portanto escolhi o mais simples(lm6).
lm8 <- lm(bwt~gestation+parity+height+weight+smoke+gestation:age,data=babies)
anova(lm8) #A interao gestation:age no  significativa para o modelo.
anova(lm6,lm8) #Os modelos so iguais. Portanto escolhi o mais simples(lm6).
lm9 <- lm(bwt~gestation+parity+height+weight+smoke+gestation:height,data=babies)
anova(lm9) #A interao gestation:height no  significativa para o modelo.
anova(lm6,lm9) #Os modelos so iguais. Portanto escolhi o mais simples(lm6).
lm10 <- lm(bwt~gestation+parity+height+weight+smoke+gestation:weight,data=babies)
anova(lm10) #A interao gestation:weight no  significativa (p=0.09) para o modelo.
anova(lm6,lm10) #Os modelos so iguais. Portanto escolhi o mais simples (lm6).
lm11 <- lm(bwt~gestation+parity+height+weight+smoke+gestation:smoke,data=babies)
anova(lm11) #A interao gestation:smoke  significativa para o modelo.
anova(lm6,lm11) #Os modelos so diferentes e o 11 tem menos resduos. Portanto escolhi o 11. 
summary(lm11) #O r^2=0.2656
lm12 <- lm(bwt~gestation+parity+height+weight+smoke+gestation:smoke+parity:age,data=babies)
anova(lm12) #A interao parity:age no  significativa para o modelo.
anova(lm11,lm12) #Os modelos so iguais. Portanto escolhi o mais simples (lm11).
lm13 <- lm(bwt~gestation+parity+height+weight+smoke+gestation:smoke+parity:height,data=babies)
anova(lm13) #A interao parity:height no  significativa(p=0.06) para o modelo.
anova(lm11,lm13) #Os modelos so iguais. Portanto escolhi o mais simples (lm11).
lm14 <- lm(bwt~gestation+parity+height+weight+smoke+gestation:smoke+parity:weight,data=babies)
anova(lm14) #A interao parity:weight no  significativa para o modelo.
anova(lm11,lm14) #Os modelos so iguais. Portanto escolhi o mais simples (lm11).
lm15 <- lm(bwt~gestation+parity+height+weight+smoke+gestation:smoke+parity:smoke,data=babies)
anova(lm15) #A interao parity:smoke no  significativa para o modelo.
anova(lm11,lm15) #Os modelos so iguais. Portanto escolhi o mais simples(lm11).
lm16 <- lm(bwt~gestation+parity+height+weight+smoke+gestation:smoke+age:height,data=babies)
anova(lm16) #A interao age:height no  significativa para o modelo.
anova(lm11,lm16) #Os modelos so iguais. portanto escolhi o mais simples (lm11).
lm17 <- lm(bwt~gestation+parity+height+weight+smoke+gestation:smoke+age:weight,data=babies)
anova(lm17) #A interao age:weight no  significativa para o modelo.
anova(lm11,lm17) #Os modelos so iguais. Portanto escolhi o mais simples (lm11).
lm18 <- lm(bwt~gestation+parity+height+weight+smoke+gestation:smoke+age:smoke,data=babies)
anova(lm18) #A interao age:smoke no  significativa para o modelo.
anova(lm11,lm18) #Os modelos so iguais. Portanto escolhi o mais simples (lm11).
lm19 <- lm(bwt~gestation+parity+height+weight+smoke+gestation:smoke+height:weight,data=babies)
anova(lm19) #A interao height:weight no  significativa para o modelo.
anova(lm11,lm19) #os modelos so iguais. Portanto escolhi o mais simples (lm11).
lm20 <- lm(bwt~gestation+parity+height+weight+smoke+gestation:smoke+height:smoke,data=babies)
anova(lm20) #A interao height:smoke no  significativa para o modelo.
anova(lm11,lm20) #Os modelos so iguais. Portanto escolhi o mais simples (lm11).
lm21 <- lm(bwt~gestation+parity+height+weight+smoke+gestation:smoke+weight:smoke,data=babies)
anova(lm21) #A interao weight:smoke no  significativa para o modelo.
anova(lm11,lm21) #Os modelos so iguais. Portanto escolhi o mais simples (lm11).

#Fiquei um pouco em dvida sobre usar a varivel weight, pois o anova foi significativo mas o summary no . Vou testar este modelo com outro sem ele:
lm23 <- lm(bwt~gestation+parity+height+smoke+gestation:smoke,data=babies)
anova(lm23) #Todos os parmetros so significativos
anova(lm11,lm23) #Vou considerar que no foi significativo (p=0.06), ento os modelos so iguais e vou usar o modelo mais simples (lm23), sem a varivel weight.

#Portanto, o modelo que mais explica os dados foi:
lm23 <- lm(bwt~gestation+parity+height+smoke+gestation:smoke,data=babies)